SOMMAIRE
 

        0 - Applications de la reconnaissance par l'iris

 
          1 - Synthèse du travail effectué et état de l'avancement du projet
 

                    1-0) Rappel du principe de l'identification par l'iris
                    1-1) Description de la partie logicielle Matlab
                                    1-1-1) Les routines
                                    1-1-2) Description des routines
                                    1-1-3) Conclusions
                    1-2) Organigramme et fonctionnalités
                                    1-2-1) Organigramme                                           
                                                1-2-2) Inventaire des fonctions spécifiques et courantes utilisées
                    1-3) Contenu théorique
                                    1-3-1) Transformation polaire-rectangulaire
                                                1-3-2) Filtrage moyenneur
                                                1-3-3) Applications de la théorie des ondelettes
                                                1-3-4) Filtrage pyramidal
                    1-4) Ouverture sur le projet de troisième année : CAHIER DES CHARGES
 

          2 - Acquisition de l'image

                    2-1) Description de la carte Rio
                    2-2) Configuration de la carte
                    2-3) Optique
                                    2-3-1) Choix de l'optique
                                                2-3-2) Elaboration d'un protocole de prise de vue : essais et résultats                                            
                           2-4) Reconnaissance de forme de l'iris
                                    2-4-1) But
                                                2-4-2) Principe
                                                2-4-3) Résultats
 

          3 - Remaniements du code et compilation

                    3-1) Recherche d'un compilateur pour la génération d'une application "Stand Alone"
                    3-2) Remaniement de l'organigramme
                    3-3) Interface
                    3-4) Optimisation du code
 
 
       4 - Avancement du projet


 


Applications du dispositif de reconnaissance de l'iris



 


            En premier lieu,  le système de reconnaissance de l'iris permet d'effectuer une identification sûre et rapide d'une personne. En conséquence, ce dispositif trouvera des applications dans tous les domaines mettant en application des systèmes de sécurité. En intégrant par exemple ce dispositif de reconnaissance dans des sas, notre système pourrait s'appliquer dans les secteurs suivants :

            Mais le système de reconnaissance par l'iris peut aussi trouver des applications qui ne sont pas directement liées à la reconnaissance et à la seule sécurité. En particulier, nous ne devons pas oublier que l'objet de reconnaissance est l'iris :  il peut donc être mis en oeuvre en ophtalmologie. Nous savons qu'un iris reste stable sur une période d'à peu près 5 ans, or certaines maladies rares provoquent des modifications importantes de l'iris. Ces maladies sont limitées à des populations à risques qui sont identifiables et qui sont généralement suivies, mais elles demandent un diagnostic rapide pour éviter soit la cécité soit une issue fatale. Ces diagnostics ne sont pas évidents à faire pour un ophtalmologiste même spécialisé car il ne rencontrera que peu de cas dans sa carrière, bien que les patients viennent se présenter spontanément car leur vue va se dégrader. Notre dispositif étant sensible à une modification de l'information au niveau de l'iris, il peut alors servir d'outil pour aider à dépister le plus tôt possible ce type de maladies, bien que pour pouvoir l'utiliser de façon rigoureuse, des études épidémiologiques soient à réaliser.  


 Synthèse du travail effectué l'année précédente



 

1-0)    Rappel du principe de l'identification par l'iris
 

        L'identification par l'iris va être réalisée par comparaison précise entre une image de test : celle de l'individu à identifier, et toutes les images d'une base de données pré-établie : celles avec lesquelles l'individu testé doit être rapproché.

        Cette identification ne peut donc être parfaite dans le sens où l'on ne dispose jamais de deux images identiques: d'une comparaison entre images ne pourra donc résulter qu'un classement par ordre de "ressemblance". La décision d'identification se tournera vers l'image de la base de données reconnue étant la plus proche en termes d'information de l'image de test.

         Nous devons considérer dans notre application les plus infimes détails d'une image d'iris, sachant que celui possède une centaine de degrés de liberté, ce qui assure l'indépendance statistique des données. L'information qui est contenue dans l'oeil n'est pas une information qui dépend du génotype mais du phénotype, ainsi même deux jumeaux n'auront pas le même iris et cela permettra de les différencier. Il s'agit de révéler cette quantité d'information de la façon la plus adaptée, ce qui constitue la chaîne de traitement de l'image.



 


 
1-1)    Description de la partie logicielle
 

        1-1-1) Les routines
 

        Nous avons récupéré un ensemble de routines écrites sous Matlab, ordonnées de la façon suivante, pour établir une chaîne complète de traitement d'une image d'iris. Elles sont au nombre de 6 et ont pour noms respectifs :

        Brièvement, décrivons les fonctionnalités de chacune de ces routines:


        1-1-2) Description des routines

 
ADD_EYE :
         Cette routine a pour but de charger une image selon l'organisation de LOAD_IMAGE, de demander à l'utilisateur les 5 paramètres des ellipses caractéristiques grâce à l'image de l'iris affichée, d'enregistrer l'image chargée et ses paramètres, si elle est nouvelle, dans la base de données.
         Sont effectuées alors une série d'opérations sur l'image chargée : filtrage moyenneur, transformation polaire - rectangulaire, filtrage pyramidal, qui adaptent l'image de la manière la plus adéquate à une comparaison ultérieure et dont on voit les résultats successifs grâce à des graphiques.

 
LOAD_IMAGE :
        Cette routine a pour but de charger une image à partir du répertoire qui la contient, que l'utilisateur doit saisir au préalable.
Le résultat de cette recherche se solde par le renvoi d'une structure d'information relative à l'image chargée et par la création d'une matrice STRIP1 résultat de la lecture de l'image suivant son format.

 
GEN_STRIP1 :
        Cette routine a pour but de charger une image selon l'organisation de LOAD_IMAGE,  et de demander à l'utilisateur d'ajuster les 5 paramètres des ellipses caractéristiques grâce à l'image de l'iris affichée.
        Une fois la saisie jugée correcte, la partie utile de l'iris délimitée par les 2 ellipses intérieures et extérieures est convertie par une transformation polaire - rectangulaire en une bande . Une transformée de Fourier bidimensionnelle est effectuée sur cette bande. Sont associées à chacun de ces traitements une visualisation de leur résultat.

 
EXPAND_CR :
        Cette routine permet d'ajouter à la table de corrélation entre images une nouvelle image, qui est comparée à toutes les autres pour les différentes orientations possibles et dont les résultats sont ensuite stockés dans cette même table.

 
INTERPRET_CR :
        Cette routine a pour but l'affichage complet du contenu de la table de corrélation entre images, en donnant un classement par ordre décroissant du résultat de la comparaison entre une image choisie par l'utilisateur dans cette table et le reste de la table.

 
DISP_CR :
        Cette routine donne la possibilité d'afficher le contenu de la table de corrélation entre les images de la base de données et
l'image en cours de comparaison, pour une orientation choisie par l'utilisateur.
        Nous avons agrémenté chaque fichier source correspondant de commentaires détaillés auxquels il est nécessaire de se reporter pour plus de précision.
 

            1-1-3) Conclusions
 

        Les routines décrites précédemment sont modulaires, chacune exécutant une partie indépendante de la chaîne d'identification. On peut donc grâce à elles isoler les fonctionnalités-clés de cette chaîne:

 
        Nous pouvons conclure que les routines décrites réalisent ces fonctionnalités, dont certaines reprennent des opérations déjà effectuées dans d'autres.
        La modularité doit donc être étudiée afin d'éviter toute redondance d'opérations, et nous devons, à partir de ces routines séparées,  reconstruire une fonction globale compilant toutes les opérations précitées.



 

1-2) Schémas fonctionnels et fonctionnalités

            1-2-1) schémas fonctionnels des routines en termes de fonctions .m spécifiques
 
 
 Deux routines seulement font appel à des fonctions spécifiques, héritées de Toolboxes disponibles sur le site de Mathworks : ADD_EYE et EXPAND_CR.
 
ADD_EYE :
 
 

La première partie concerne le filtrage moyenneur : fonction MEDFILT2 dont l'arborescence est décrite ci-dessus.


 

La seconde concerne le filtrage pyramidal : construction de la pyramide, qui contient le résultat de l'analyse multi-résolution.


 
Cette partie concerne l'affichage du résultat de l'analyse multi-résolution : une série d'images de dimensions successivement réduites.

Cette dernière partie de ADD_EYE crée le Strip, qui est la transformée des images précédentes.

 EXPAND_CR :
 
EXPAND_CR ne fait appel qu'à CORR2 qui fait office de corrélation en deux dimensions pour la comparaison d'images entre elles.
 

            1-2-2) Inventaire des fonctions spécifiques et courantes

            On peut recenser les fonctions matlab appelées dans les routines récupérées afin de comparer les méthodes de translation du code pour le passage à une application "Stand alone".

Fonctions spécifiques :

Filtrage moyenneur  : medfilt2, bestblk, colfilt, im2col, isind, col2im, imresize
Transformation polaire-rectangulaire : pol2rec2
Filtrage pyramidal : buildspyr, showspyr, spyrband, maxpyrht, corrdn, buildspyrlevs, rconv2, factorial, pointop, ifftshift, range2, var2, mean2, spyrnumbands, spyrht, spyrhigh, pyrlow, pyrband, pyrbandindices, pixelaxes, corr2

Interfaces :
disp, input, get, nargin, nargchk, error, warning, clear, clc, clf ...

Matrices :
any, all, isempty, zeros, ones, prod, size ...

Algébriques :
min, max, floor, ceil, abs, mean, prod, sum, cos, sqrt ...

Graphiques :
plot, subplot, image, figure, title, set, colormap, gray, axis, drawnow ...

Chaines de caractères :
length, num2str, int2str, strcat, strcmp, isstr...

Opérations fichiers :
cd, save, load, uigetfile, close ...

Variables :
isa, double, uint8, isreal ...

Autres :
class, imfinfo, imread, exist, fcall, lower, eval, rem, reshape, deblank, fft2, ifft2, conv2, repmat, interp1, fprintf, sprintf, filt ...
 

             Il apparaît donc environ une centaine de fonctions matlab récurrentes, qu'on peut classer en plusieurs catégories :

             La spécificité de Matlab résidant justement dans le calcul matriciel, permettant ainsi des traitements itératifs importants, on se heurte dans un même temps à son principal inconvénient : la ré-écriture dans un autre langage sera délicate dans la mesure où, par exemple, le langage C est très peu orienté sur le calcul matriciel.
 
 
 



 

1-3) Contenu théorique
 

            1-3-1) Transformation polaire - rectangulaire

            Lorsque la partie utile de l'iris peut être sélectionnée au moyen de 2 ellipses : l'une délimitant l'iris et le blanc de l'oeil, l'autre délimitant l'iris et la pupille, il reste la zone utile comprise entre ces 2 ellipses extérieure et intérieure.
            La meilleure façon de profiter de cette sélection est tout d'abord la suppression de l'information non-utile et ensuite la remise en forme matricielle de l'information utile.
            Laissée telle quelle, l'information utile serait d'une part dépendante de la localisation de l'iris sur l'image de test, et d'autre part mobiliserait une matrice de pixels trop importante pour le nombre de pixels utiles.
            D'où l'intuition immédiate d'opérer une transformation polaire rectangulaire, de transformer une "couronne" en une "bande".

            1-3-2) Filtrage moyenneur

            Des essais ont été réalisés sur les images d'iris, afin de constater quelles parties du spectre fréquentiel étaient privilégiées, et d'en tirer les conclusions nécessaires à une éventuelle compression de données, soit la décision de ne pas prendre en compte une ou certaines régions du spectre jugées trop peu significatives en regard des autres régions de ce spectre représentées dans l'image.
            Une simple FFT bidimensionnelle est effectuée sur la matrice bande récupérée de la transformation précédente

 

                                               Transformée de Fourier bidimensionnelle de l'iris après
                                                           transformation polaire rectangulaire
 

            Il en résulte que l'information se concentrait dans le domaine des hautes fréquences, du moins à partir du résultat de la fft. Il subsistait un doute quant aux bruits éventuels issus du capteur, qu'on sait présents dans les hautes fréquences, et donc capables de fausser la conclusion précédente.
            L'essai d'annulation des hautes fréquences par filtrage donne une image floue et inexploitable, tandis qu'un essai d'annulation des basses fréquences n'entraîne aucune dégradation remarquable de l'image jusqu'à environ 60% des coefficients des basses fréquences.
            A été testé un filtre coupe-bande centré en bande moyenne dont le résultat est présenté ci-dessous :

      FFT de l'image avant filtrage
 

       FFT de l'image après filtrage
 


            Les fréquences basses sont très peu présentes, il en résulte donc que le filtre coupe-bande centré en bande moyenne est équivalent à un filtre passe-bas. Le filtre choisi a été exhibé de la fonction "MEDFILT2", qui effectue un filtrage moyenneur  par convolution avec l'image source en optimisant le traitement matriciel  ( détermination des blocs optimaux, traitement par colonnes, ... )
 

            1-3-3)  Application de la théorie des ondelettes
 

            La théorie des ondelettes est issue des fruits de la recherche de Gabor en analyse spectrale, qui a décrit les limites de l'analyse de Fourier. En effet, la transformée de Fourier, qui est censée donner les informations contenues dans un signal sous leur forme fréquentielle, est en outre incapable de localiser les portions temporelles de ce signal dans lesquelles les variations sont lentes ( contenant des basses fréquences ) ou rapides ( contenant des hautes fréquences ), ceci étant dû au fait que l'on recherche une décomposition du signal analysé en sinusoïdes pour toutes les fréquences. Une sinusoïde est un signal périodique, associée à une fréquence "infiniment pure", mais à laquelle l'on ne saurait affecter de notion temporelle précise (instant de départ, durée): une sinusoïde n'a ni début ni fin.

            L'ondelette est donc née de la recherche d'une décomposition en signaux portant les deux informations fréquentielles et temporelles. Une ondelette est finalement une fonction élémentaire dont on fait varier la localisation temporelle ( translation ) ainsi que la taille ( dilatation ) tout en gardant leur forme constante : la dilatation s'accompagne d'une variation de la vitesse des oscillations donc de la fréquence. Par suite, de la même manière que dans la transformée de Fourier, un signal s'écrit sous la forme d'une superposition de telles ondelettes décalées et dilatées. Ces dernières s'adaptent d'elles mêmes à la taille des caractéristiques qu'elles recherchent : elles sont très étendues pour étudier les basses fréquences et très fines pour étudier les hautes fréquences. Ceci porte le nom d'analyse multi-résolution.

            La transformée en ondelettes se définit par l'expression :

 
dans laquelle les deux arguments u et s sont respectivement le facteur de translation et de dilatation et  l'atome de base phi  est une fonction de moyenne nulle, centrée au voisinage de 0 et d'énergie finie.


  Illustration théorique de l'analyse multi-résolution

        Dans notre cas, nous avons besoin de modéliser l'image comme un signal : une image consiste en une série de points ( pixels ) plus ou moins sombres qu'on peut idéaliser comme une fonction de l'espace à 2 dimensions, qui associe à chaque point son niveau de gris ( image NB ). Lisser cette image, soit réaliser une convolution de cette image avec une fonction régulière, revient à la rendre floue, c'est à dire diminuer sa résolution. Si on répète x fois cette opération de convolution, nous disposons d'une série d'images résultantes de plus en plus floues, dont chacune contient des détails correspondant à la résolution associée.
 
        On peut montrer que le calcul de la différence entre deux images de résolution consécutive st identique au calcul d'une transformée en ondelettes de cette image.
 
        Alors, la reconstruction de l'image à partir de ses coefficients en ondelettes est intuitive : l'image à sa résolution la plus grande est égale à la somme d'une version floue et des détails qui apparaissent à des échelles ( ou résolutions ) différentes.
 

            1-3-4)  Filtrage pyramidal

Le changement de résolution est équivalent à la fonction de dilatation de l'ondelette et cette opération peut être représentée comme une suite de filtres passe-haut (correspondant à la sélection des détails de l'image ) et passe-bas ( correspondant aux résidus de l'image ). Dans ces conditions, le signal original est successivement décomposé en signaux de résolutions plus faibles.
 
 


 

          Ce schéma correspond aux itérations de filtrage opérées sur le signal origine x[n] : les Dx d'ordre i correspondent aux coefficients en ondelettes ( résultats de G(z) passe-bas ) et Ax est le résidu, "reste" d'information qu'on ne filtre plus.
 

            Le filtrage orienté est un type de filtrage appliqué aux signaux à 2 dimensions et a pour fondement de privilégier une direction particulière dans le plan d'analyse de l'image. Dans le cas d'images représentées par des matrices, il s'agit toujours d'opérations de convolutions. Le choix des filtres passe-haut et passe-bas se porte sur des filtres orientés passe-haut et passe-bas qui opèrent toujours leur sélection fréquentielle respective mais se focalisent dans un même temps sur les variations de l'image ainsi que sur leurs direction spatiale : ce sont des filtres bivalents.
 
 

 

                                                                    Schéma de principe de filtrage

            L'image initiale est d'abord filtrée par Ho (passe-haut) et Lo (passe-bas). Le résultat en sortie de Ho correspond aux coefficients de la décomposition à l'échelle 1 et la sortie de Lo représente le résidu à la même échelle. Les résultats suivants sont obtenus de manière identique avec (K+1) filtres ( Bo à Bk ) orientés à chaque échelle successive : les coefficients en sortie des Bin  sont les décompositions orientées à l'échelle n.
 

                              image source                                            Exemple de décomposition orientée

Remarque : le caractère intuitif du filtrage orienté est ici illustré : le résultat du filtrage peut se ramener à une "vue" de l'image source éclairée par une lumière rasante orientée diagonalement, verticalement, horizontalement, ce qui donne 4 décompositions.
 
           Une décomposition orientable peut donc se définir comme une décomposition multi-orientation ( caractère orienté des filtres ) et multi-résolution ( plusieurs échelles dans la décomposition ) : cette décomposition s'apparente à la transformée en ondelettes.

            Il ne reste qu'à choisir l'orientation optimale des filtre orientés pour avoir une représentation fréquentielle de l'iris possédant la meilleure résolution. Exemple ci dessous sur une FFT d'image.

  

                      image source                                                                décompositions orientées
 
 
 Remarque :  c'est l'orientation horizontale (en haut à droite) qui porte le plus d'informations. Intuitivement encore, la FFT de l'image est décrite par des "raies" verticales : il apparaît donc logique d' "éclairer" cette FFT horizontalement, pour accentuer les "reliefs".
 
 
             On donne un nom à cette décomposition récursive, se composant d'opérations de filtrages passe-bas et passe-haut orientées, celui de filtrage pyramidal, en raison de la représentation pyramidale formée par les images successives résultant de ces opérations (voir ci-dessus). 
 
 
 



 
 

1-4) Ouverture sur le travail de troisième année : CAHIERS DES CHARGES
 
           Nous disposons à l'aune de cette troisième année du travail effectué dans le projet de reconnaissance par l'iris l'année précédente par un trinôme de seconde année.
            Nous avons récupéré une série de routines codées sous Matlab, soit des fonctions précompilées à usage de simulation.
            Le but de la récupération de cet ensemble est l'implémentation logicielle de l'application globale de reconnaissance par l'iris, et en cela la réalisation d'un logiciel autonome, indépendant de l'environnement d'utilisation.
 

                            CAHIER DES CHARGES
 
 
 Objectifs :

Le but premier de ce projet est l'implémentation d'un algorithme de biométrie de l'iris humain, ceci afin de réaliser un appareil qui identifie nommément l'individu grâce aux informations que contient son iris.

Mise en oeuvre :

On distingue 3 parties
 
  • Acquisition de l'image d'iris : caméra, optique, et carte d'acquisition 
  • Traitement de l'image adapté 
  • Interprétation et présentation 
 



 

 Acquisition :

            L'acquisition est à réaliser avec une caméra de marque Optovision en noir et blanc.
            Il reste à déterminer les performances de la chaîne d'acquisition :
 
            Caméra :
            * du point de vue fréquentiel
            * le niveau de précision du capteur ( 8, 10, 12 bits ou plus par pixel)
            * la densité du capteur ( sa résolution )

            Objectif :
            * sa focale
            * sa sensibilité à l'intensité lumineuse ( ouverture )
            * sa distance de mise au point
            * sa qualité de fabrication et l'adaptation mécanique ( standards C, Cs, Board... )
 
            Eclairage :
            * configuration de ou des sources lumineuses
            * son intensité
            * configuration des filtres optiques anti-reflets éventuels

            Il est important de ne pas négliger toutes les imperfections conjuguées lors de la prise de vue de l'oeil : position, reflets, taille de l'iris dans l'image ...

Traitement :

            Le code existant doit avoir une exécution plus fluide et plus rapide. Et ceci par l'emploi d'une ou plusieurs méthodes parmi :

            Il est important que les programmes ainsi produits soient simples à déplacer ( taille minimale ) et que l'utilisateur soit sollicité le moins possible.
            Les fonctions de recherche automatique des paramètres de la pupille et de l'iris et du blanc de l'oeil sont à écrire.
            Le principe de base du traitement ( filtrage, opérations matricielles ...) est conservé.

Présentation :

            Plusieurs images sont à afficher :


 Acquisition de l'image


 
2-1) Description de la carte Rio


            Nous donnons tout d'abord un bref aperçu de l'architecture de la carte RIO.


            Pour la carte RIO la plus simple, nous ne disposons que du module d'entrée 0, ce qui limitera notre choix pour la configuration de la carte. Il en est de même pour le choix du format d'entrée des images, seul le mode RIO_BW est disponible et non pas le mode noir et blanc de haute qualité.
            Deux scalers sont connectés aux modules d'entrée: le scaler haute performance ou HPS et le binary ratio scaler. Ils sont eux même connectés au contrôleur DMA, qui assure le lien avec le bus PCI.

            Elle dispose de contrôleur de bus PCI de troisième génération. Les bus PCI ont été disponible sur le marché depuis un certain temps mais ils n'était pas dédié au traitement d'images en temps réel. Ici, il y a possibilité d'avoir des accès en écriture en mémoire vidéo depuis un bus externe de bande passante de 45 MB/s. La carte RIO a un contrôleur DMA de bus PCI, qui permet des transferts en mode rafale jusqu'à 132 MB/s combiné à un contrôleur de transfert très souple. Il évite l'intervention de la CPU et son engorgement.

            L'interface PCI permet d'avoir de l'adressage en mémoire virtuelle pour des systèmes comme Windows. L'unité de gestion de la mémoire ou MMU traduit des adresses linéaires en adresses physiques en utilisant une table dans la mémoire système. La MMU supporte plus de 4Mbytes d'espace d'adresses virtuelles par canal DMA.

            Nous pouvons relier plusieurs caméra couleurs ou noir et blanc à la carte mais pour notre part nous n'en utiliserons qu'une seule caméra noir et blanc. Les standards CCIR, EIA sont admis par la carte.



 

                                                           Aperçu des connexions de la carte RIO



 


 

2-2) Configuration de la carte
 

            La carte RIO met à disposition de l'utilisateur différentes routines en C/C++ qui permettent sa configuration. Nous allons utiliser la configuration RIO_BW car nous travaillons en noir et blanc. Dès lors , nous avons à notre crédit trois différents format de données: RIO_Y1, RIO_Y2, et RIO_Y8. Ces trois formats de sortie ont les caractéristiques suivantes qui sont indiquées dans le tableau :
 

            Comme nous avons à coder différents niveaux de gris, car ils représenteront l'information contenue dans l'image de l'iris, nous ne pouvons pas choisir les deux formats suivants: RIO_Y1 et RIO_Y2.
            En effet ces deux différents formats sont codés avec un bit par pixel pour le premier et deux bits par pixel pour le second.
            Pour l'acquisition, nous utilisons un module de capture tel que le flux d'images soit de 10 images par secondes. Or cette fréquence est inférieure à la fréquence image utilisée en télévision noir et blanc, donc les différentes images et les transitions entre deux images seront perceptibles par l'oeil humain, mais nous devons considérer deux facteurs: l'occupation mémoire et les capacités physiques de la personne observée.

            Nous ne devons pas surcharger la mémoire par nos prises de vues et donc nos fichiers images. Une fréquence d'acquisition supérieure n'aurait pas eu d'intérêt. Ensuite l'utilisateur choisira l'image qui lui paraîtra correspondre le mieux aux critères de fonctionnement des routines de traitement: le moins de reflet possibles, un iris entier, pas de cil ni de paupière sur l'image etc...

            Le second critère est plus biologique, c'est pour cela qu'il a été dit qu'il dépendait des capacités physiques de la personne. Il est difficile de rester immobile pendant un temps même restreint pour une personne. En effet, nous sommes constamment en oscillation autour d'une position d'équilibre, ce qui est particulièrement remarquable chez les personnes nerveuses. De plus, un iris va être très sensible à son environnement extérieur, son attention sera facilement capté ce qui se traduira infailliblement par un mouvement du nerf optique donc de l'iris. Même si nous nous concentrons, il ressort qu'il est difficile de conserver une position stable de l' oeil pendant une durée de quelques secondes.

            Ainsi, il faut trouver une fréquence image qui respecte ces deux impératifs. De manière expérimentale, nous avons choisi une fréquence de dix images par secondes, étant donné que la durée d'observation est faible.

            Maintenant, nous allons détailler les différentes configurations que nous utilisons avec la carte RIO. La taille du format de sortie de l'image dépend du type de caméra utilisée et du type de saisie en mode champ ou mode cadre. Les différents formats sont détaillés dans le tableau suivant :

            Le format de sortie choisi est de 768 par 576 car nous travaillons en frame grabbing.

            Dans le module RIO_INPUT_MODULE, nous devons choisir l'entrée RIO_IM_0.

            Le scaler permet de donner la taille de sortie de l'image, on choisit alors le paramètre RIO_HPS qui détermine un scaler de haute performance.

            Le standard vidéo utilisé est le CCIR à 50Hz.

            Nous prenons le RIO_VTR. Nous devons indiquer quel type de module de capture nous allons utiliser, c'est à dire ici RIO_FRAME.


Les opérations sur la carte
 
  Initialisation

Différents appels à des fonctions sont réalisés pour prendre en charge l'initialisation de la carte dont voici le détail :

 RioSetup : vérifie la présence de la carte et de la connectique
 RioOpen :  vérifie la présence de la carte et son fonctionnement, c'est la première fonction qui doit être appelée
 pRiodl : réalise l'allocation mémoire pour les datas de la carte, elle considère le nombre de cartes RIO et leurs identifiants sur le bus PCI, c'est un pointeur
RioCreateRiodl :  est appelée pour l'utilisation de la mémoire allouée, elle vérifie le pointeur pRiodl
RioModuleSetup : définit les paramètres de la configuration utilisée
RioSetInputModule : sélectionne un des différents modes d'entrée ( ici RIO_BW )
RioSelectCamera : permet de sélectionner la caméra de travail par son identifiant
PaletteSetup : alloue de la RAM pour l'image et crée la palette
RioMemLock : gère l'allocation DMA, et le blocage en RAM de la mémoire allouée )
RioScatterLock

   Capture 

RioCapture : gère le passage de l'image de la carte vers la zone mémoire réservée

    Exit

RioMemUnlock : prend en charge la désallocation du DMA et de la RAM
PaletteShutdown : coupe le flux d'images
RioShutdown
RioClose
 

Déroulement des opérations

1) RETURN ou clic sur le bouton "jumelles" pour lancer les images.
2 ) ESPACE ou clic sur "appareil photo" pour capture et sauvegarde vers C:\iris_pics\aa.bmp
3) RETURN pour interrompre la prise de vue avant de quitter.
 



 


2-3) Optique

            2-3-2) Elaboration d'un protocole de prise de vue : essais et résultats

            Les essais réalisés depuis l'année dernière ont montré que la dépendance des résultats d'identification vis à vis de la prise de vue est grande. Une variation infime de ses facteurs déterminants peut fortement dégrader l'image de test, soit après interprétation, les résultats eux-mêmes. Ces facteurs ont été étudiés et il ressort que l'éclairage est primordial dans la mesure où il implique le ou les reflets qui altèrent l'information portée par l'iris, et également l'ouverture de la pupille qui, par contraction ou dilatation, déforme non linéairement l'iris.
            En outre, cette sévère dépendance doit nous obliger à trouver un protocole de prise de vue de l'oeil afin que : premièrement, l'on puisse assurer des conditions optimales de prise de vue, par étude cumulée des différents facteurs déterminants, et deuxièmement, l'on puisse assurer la répétabilité de ces prises de vue pour effectuer une comparaison d'images, obtenues dans des  conditions proches, suffisamment fiable.
Les contraintes qui semblent établies sont :

             D'autre part, le second facteur déterminant est l'individu testé lui-même dans la mesure où il doit se présenter devant l'objectif de la caméra et se soumettre à la prise de vue. Nous devons assurer qu'il ne bouge pas l'oeil (ou le moins possible )
lorsqu'il est dans le champ de l'objectif, d'où l'idée de repères et de maintiens physiques des parties de la tête comme tempes, menton ... pour déjà minimiser les effets des mouvements du corps.

            Pour l'instant, rien n'est définitif et nous attendons de mieux connaître le nouvel objectif pour tirer des conclusions et finaliser le protocole de prise de vue.
 


            2-3-1) Choix de l'optique

            Après maintes recherches auprès de constructeurs et de revendeurs spécialistes, nous avons dû choisir un objectif macrophotographique, c'est à dire capable de capter des images très proches sans accuser de baisse significative de l'intensité lumineuse.
            Le principal problème a résidé dans le fait que l'objectif recherché n'était pas destiné à la photographique classique avec montages classiques à vis ou baïonnettes ( adaptation avec boîtier d'appareils photographiques ) et diaphragme pour capteur, mais devait s'adapter à un capteur 1/3, c'est à dire un capteur de sensibilité très inférieure et surtout à un montage Cs. De ce fait, les optiques classiques utilisées en photographie ne pouvaient convenir, faute d'adaptateurs mécaniques.

            Notre choix s'est donc finalement porté sur un objectif qui avait d'abord été recommandé par Optovision, qui nous a également fourni la caméra. Nous joignons les caractéristiques de l'objectif.
 
 


 
 
 



 

2-4) Reconnaissance de forme de l'iris

            2-4-1) But

            L'identification de l'iris est basée sur l'interprétation et la comparaison des informations entre deux iris d'un même oeil ( gauche ou droite ) appartenant à deux individus pouvant être la même personne ou non : dans le premier cas, il doit y avoir authentification, dans le second non.
 
            La sélection des images d'iris par la carte au travers de la caméra et de l'objectif peut donner lieu à des différences de taille et d'orientation entre plusieurs clichés : il est donc nécessaire de rendre l'information utile ( l'iris uniquement ) indépendante des paramètres de l'image. C'est pourquoi il faut éliminer les informations non utiles voire gênantes : la pupille, le blanc de l'oeil, peut-être les reflets et les zones de la  paupière dans le cas d'empiétement significatif sur l'iris.
 
            Cette opération permettra donc de rendre le traitement ultérieur plus fiable car on ne compare que les informations de l'iris seuls significatifs et en outre de gagner en occupation mémoire lors de la sauvegarde des fichiers image.
 


            2-4-2)  Principe

            Nous avons précédemment énoncé les zones d'informations de l'image qui sont à éliminer : la pupille, le blanc de l'oeil, et éventuellement les reflets : zones de dégradation absolue de l'information, et les parties de paupière qui empiètent sur l'iris.
 
            Pour les deux premières zones, le traitement sera plus simple pour des raisons géométriques simples : l'iris a toujours la même forme générale : une ellipse, dont il va falloir justement trouver les paramètres. La pupille et le blanc de l'oeil peuvent donc être repérés au moyen de deux ellipses : la première, intérieure à l'iris qui contient la pupille et la seconde, extérieure qui délimite le blanc de l'oeil.
 
            Cela paraît simple au vu des 5 paramètres qui la caractérisent : son centre en abscisses Xo, en ordonnées Yo, son grand rayon A et son petit rayon B, et de surcroît l'angle I que fait l'ellipse par rapport à l'horizontale.
L'opération de sélection de l'iris se décompose en deux opérations identiques de recherche d'ellipse : l'iris est ensuite localisé dans une couronne déformée définie par ces deux ellipses.

Schéma :
 

 
 

            Cette géométrie particulière de l'oeil est un avantage et un inconvénient : l'avantage est que le contour de délimitation est mémorisable ( 5 paramètres seulement au lieu d'un ensemble de coordonnées de pixels ) et l'inconvénient est que les ellipses n'ont pas le même angle de référence, ce qui complique la transformation polaire rectangulaire.
 

            2-4-3) Résultats
 

            La recherche des deux ellipses se fait par seuillage, dans la mesure où la pupille est de couleur quasiment constante et sensiblement plus sombre que l'iris, si ce dernier est bien éclairé, donc si ses couleurs sont bien visibles et la pupille suffisamment contractée.
            Le problème apparaît lorsqu'on s'attache à la nature de l'image : un ensemble de pixels, qui lui confèrent sa caractéristique discrétisée de l'espace.

            C'est donc un ensemble de points qui vont être sélectionnés par seuillage de part et d'autre de l'ellipse réelle ( dans l'espace analogique ) : nous avons un nuage de points duquel les paramètres vont être déduits par la technique statistique des moindres carrés, rudimentaire mais néanmoins efficace.
 

             Le principe du seuillage est simple, il consiste à comparer l'intensité (en NB : deux niveaux de gris ) de pixels contigus par sélection de sous-matrices de l'image qui la décrivent par balayage selon les directions verticales et horizontales . Les résultats de cette opération sont stockés dans une autre matrice dont on sélectionne les éléments caractérisant les zones de plus fort contraste : nous obtenons un nuage de points qu'il faut exploiter.
              Cette technique est utilisée pour déduire de ce nuage de points les paramètres des ellipses. elle consiste simplement à minimiser l'erreur quadratique moyenne entre la courbe de l'ellipse et les différents points du nuage. On fait varier les paramètres de l'ellipse pour effectuer la minimisation.
 

Illustration et commentaires :

            On illustre ici les régions de plus fortes variations (en rouge sombre sur le graphe), soit les zones d'empiétement de la paupière et la zone de reflets mordant sur l'iris et la pupille.


 
 
           Par seuillage, on arrive à sélectionner les pixels se trouvant aux frontières de fort contraste : blanc de l'oeil / iris et iris / pupille.
            Le seuillage n'est pas parfait car il subsiste des zones d' "indécision" sur ces frontières ; en effet, les transitions lumineuses ne sont pas instantanées dans l'image, plusieurs pixels sont nécessaires pour traduire ces transitions.
            Il y a également des erreurs de seuillage, par exemple, là où la densité en pixels sélectionnés est très faible ( intérieur de l'iris, intérieur de la pupille, extérieur de l'iris ... ) : il ne faut garder que les régions de plus forte densité. Par exemple, pour la détermination de l'ellipse extérieure, le graphe suivant illustre le résultat de cette seconde sélection.
 

 
 

            Le graphe ci-dessus illustre la sélection de la région de transition externe (iris / blanc de l'oeil ), les erreurs de seuillage sont éliminées grâce à une condition de différence de niveau plus sévère : on obtient bien le nuage de points nécessaire à la détermination de l'ellipse externe.
 
 


 

            Sur ce graphe, sont superposés le nuage de points et le graphe de l'ellipse déterminée par la méthode des moindres carrés. On remarque qu'il suffit de peu de points dans le nuage pour avoir de bons résultats. Les points significatifs se localisent aux deux extrémités des grands rayons.


 



 
Remaniements du code et compilation


3-1) Recherche d'un compilateur pour la génération d'une application "Stand Alone"
 
            Le but du projet étant de produire une application indépendante de l'environnement informatique dans une configuration minimale ( mémoire RAM et ROM tout de même suffisantes ... ), nous devons trouver un moyen pour y parvenir : plusieurs possibilités ont été énoncées : premièrement, celle de ré-écrire les procédures Matlab en langage C ou C++, qui est d'emblée écartée pour la masse de travail que cela représente ( une centaine de fonctions à ré-écrire ), deuxièmement, une compilation du code Matlab à l'aide d'un cross-compilateur, outil de développement permettant de "traduire" un code en un autre, en termes de fonctionnalités et de formats des données.

            Le compilateur proposé est un compilateur édité chez Mathworks. Après analyse des informations de son fonctionnement, il semble que ce dernier soit apte à produire une application Stand-Alone, la seule réserve étant l'hypothétique nécessité de la présence de la version de Matlab associée au compilateur sur la machine qui accueille l'application.
 

3-2) Remaniements de l'organigramme
 
            Nous proposons le nouveau schéma fonctionnel décrivant l'application.

 
 
            Nous constatons que le diagramme fonctionnel du processus d'identification par l'iris ne s'enrichit que d'une branche. A la branche unique d'analyse des images pré-existantes et stockées préalablement sur le disque dur s'ajoute la branche d'analyse des images récupérées par la caméra et prises en charge par la carte Rio.
            Les autres fonctionnalités sont globalement conservées par rapport aux résultats obtenus l'an passé : nous proposons ici le détail du nouveau schéma fonctionnel tenant compte de la partie acquisition de l'image ainsi que l'explication du rôle de chacun des modules présent dans le schéma.



 

            EWS_LOAD est le module principal de prétraitement de l'image et de la détermination des paramètres utiles de l'iris dans cette image. Nous détaillons : PROCESS qui est le module de traitement subdivisé en sous fonctions,  FIND_VALUES chargée de déterminer les paramètres de l'ellipse interne, FIND_LAST, de déterminer ceux de l'ellipse externe, ELL2REC chargée d'effectuer la conversion polaire rectangulaire améliorée à cause de la géométrie des ellipses, et IMG_COMPUTE filtre d'extraction des paramètres.

Remarques :
ELL2REC opère la transformation polaire-rectangulaire. La configuration respective des deux ellipses fait que nous avons dû changer l'algorithme de transformation. Le nouvel algorithme opère de manière à décrire la couronne située entre les 2 ellipses selon une géométrie de "diaphragme".
 

            Cette routine permet de déterminer les paramètres de l'ellipse interne. Elle se compose de : OPR_COLOR, chargée de sélectionner les couleurs les plus sombres de façon à localiser la zone iris / pupille, FIND_OBJECTS, chargée d'isoler les objets ou blocs ayant globalement les mêmes intensités, BW_MORPH, chargée et TEST_ELL, chargée de déduire les paramètres de l'ellipse à partir des points de l'objet isolé.
 
 
 


 
 

             Cette routine est globalement de même fonctionnalité que la précédente mais se distingue par : IMRESIZE, qui divise par 4 la taille de l'image, OPR_COLOR utilisée cette fois pour sélectionner les couleurs les plus claires ( iris / blanc de l'oeil ), DISP_ANGLES, qui cherche à partir du centre de la première ellipse la distance à laquelle se trouvent le maximum de points n'appartenant pas à l'ellipse interne et correspondant à la zone de fort contraste (iris /blanc de l'oeil), BWMAJORITY, chargée de débruiter l'image traitée, soit d'éliminer les points qui ne font pas partie des objets qui ont une grande superficie, TEST_ELL, qui déduit les paramètres de l'ellipse à partir des points isolés. 
 

            Cette routine comprend toutes les routines de filtrage pyramidal décrites dans le premier chapitre, qui créent une série d'images en analyse multi-résolution et la convertissent en pyramide : le Strip

3-3) Interface utilisateur
 
            Etant donnée notre décision d'effectuer une cross-compilation, l'interface utilisateur, qui devait être initialement réalisée grâce à Visual Basic, est finalement réalisée à l'aide des bibliothèques Matlab. L'interface sera donc de même traduite grâce au compilateur. Nous décrivons par la suite les choix faits pour cette interface.

Aperçu de l'interface :


 
Commentaires :

            L'interface se présente sous la forme d'une fenêtre ouverte, dans laquelle sont disponibles les différentes options de fonctionnement du programme d'identification

            Cette interface et simple, conviviale et intuitive : seul le détail des résultats intermédiaires fait référence implicitement au traitement de l'image, le reste des informations affichées pouvant être appréhendé par tout novice.

3-4) Optimisation du code
 
            Les calculs de traitement de l'image sont nombreux dans les routines successives et le but de cette application d'identification par l'iris est de pouvoir décider de l'authentification d'un individu ou non en temps réel, donc il est absolument nécessaire d'alléger, quand c'est possible les opérations contenues dans les routines de traitement, pour gagner en temps de calcul et pouvoir compter sur un cycle de calcul raisonnable chiffrable en quelques secondes au plus. D'autre part, il n'est pas négligeable d'alléger les routines en taille lorsqu'il est possible de simplifier ces dernières et de les adapter à notre
application. Les améliorations se sont portées essentiellement sur les fonctions récupérées chez Mathworks, qui ont la caractéristique d'être polyvalentes et adaptables à différentes situations d'emploi. Notre application n'utilise les fonctions BUILSPYR, SHOWSPYR, SPYRBAND, et MEDFILT2 que dans un cas donné : nous pouvons donc gagner en taille sur toutes les procédures de vérifications d'arguments d'entrée validant les configurations d'utilisation de ces fonctions.

ex : BUILDSPYR :  

            Pour toutes les fonctions rencontrées, les allégements portent sur ces mêmes points et nous n'y gagnons que peu.


            Nous nous porterons à l'avenir sur la recherche d'outils de traitement plus fiables, donnant de meilleurs résultats d'interprétation et éventuellement plus rapide, notamment une méthode de comparaison autre que la corrélation, de façon à assurer des distances plus grandes entre individus non authentifiés et minimiser la probabilité d'erreur.


 Avancement du projet

             Nous parvenons, dans ce premier trimestre de l'année scolaire à obtenir une apllication incomplète encore mais déjà opérationnelle, qui opère tous les traitements de l'image sans exception. Restent donc à réaliser :